zabbix使用pyora监控oracle数据库

        使用Orabbix监控oracle数据库,发现可以实现对oracel数据库实行监控,但是 最近部署Orabbix监控oracle数据库,发现始终无法获取到数据库的内容。。。。。。由于Orabbix是基于java实现的,使用的是jdbc连接oracle数据库,获取到的值传递给zabbix捕捉器来捕捉,这个过程我不是很熟悉。。。。。。始终无法调试出图来。。。最后终于放弃,寻找Orabbix的替代品。在zabbix官网找了一遍,发现使用python实现的pyora这个脚本还不错,最大的优势就是能够自定义自己想监控的相关参数,只需要修改脚本,在里面添加相关函数就行。pyora是通过python使用python的一个组件cx_Oracle来获取的,获取到的数据传递给zabbix的agent,从而获取到相关监控数据,这种方式比较简单,也比较容易扩展。pyora的缺点就是本身提供的监控item比较少,而且提供的模板是一个半成品模板,需要自己根据需要设计相应的模板,从而达到监控的目的。总体来说,pyora的特点就是简单,开源,易扩展,但是整体做的不是很完整。

        首先,需要下载pyora,在zabbix官网上面找到的github的链接,链接在这https://github.com/bicofino/Pyora

        然而python需要安装cx_Oracle这个组件才能连接到数据库,安装cx_Oracle这个组件比较麻烦,搞了差不多两个多小时才搞定,开始使用源码安装,结果安装不上去。。。一直解决不了报错。。。于是去找了rpm包来安装,由于这里的oracle数据库的python版本是2.6的,所以下载了2.6对应的版本,并且这里支持的最新的oracle也只有11g,而我这里使用的是12c,当时还担心了好久,怕无法使用,后来证实11g的rpm包也是可以在12c的oracle数据库上面使用的,链接在这http://sourceforge.net/projects/cx-oracle/files/5.1.2/cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm/download 可以根据自己的需要下载相应的rpm包。

        还需要下载两个python的组件,一个是argparse,还有一个是setuptools这两个包都是到Python官网下载的。首先安装setuptools,然后再安装argparse,安装方式是使用源码安装,解压后进入目录,使用python setup.py install就可以安装了。

        好了,前期准备工作做完了,接下来就需要安装cx_Oracle了,首先,在root用户下 的.bashrc中添加oracle的环境变量,否则将导致无法使用cx_Oracle模块,下面是在用 户中添加的环境变量:

1
2
3
4
5
6
7
tail -6 .bashrc
# User specific aliases and functions
export ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/dbhome
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/lib:/lib:/usr/lib:$ORACLE_HOME/rdbms/lib
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:$ORACLE_HOME/rdbms/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

        添加好环境变量之后,需要使其立即生效,使用命令source .bashrc来使其生效,注意export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/lib:/lib:/usr/lib:$ORACLE_HOME/rdbms/lib这条命令,刚开始的时候没有添加后面的lib的环境变量,导致安装好cx_Oracle 组件之后还是无法import这个组件,报错信息如下:

1
error while loading shared libraries: libclntsh.so.11.1: cannot open shared object file: No such file or directory

        后来,将环境变量中添加了lib库该报错就消失了。接下来就是安装cx_Oracle组建了,使用rpm -ivh cx_Oracle-5.1.2-11g-py26-1.x86_64.rpm就可以安装了,安装好后使用下面的操作看是否能够正常的import,下面是我的操作步骤,如果你的和我的一样没有异常输出,那么就没问题的:

1
2
3
4
5
6
python
Python 2.6.6 (r266:84292, Jan 22 2014, 01:49:05)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>>

        安装好后就可以使用pyora脚本来获取值了,(PS:对了,在这之前,需要在oracle数据库中创建相应的监控用户)关于oracle数据库中添加相应的监控用户权限属于DBA的范畴了,我这里只会贴出一些参考的权限配置,相关配置各位可以和公司的DBA协商配置:

1
2
3
4
5
6
7
8
9
CREATE USER ZABBIX IDENTIFIED BY 123456 DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
GRANT CONNECT TO ZABBIX;
GRANT RESOURCE TO ZABBIX;
ALTER USER ZABBIX DEFAULT ROLE ALL;
GRANT SELECT ANY TABLE TO ZABBIX;
GRANT CREATE SESSION TO ZABBIX;
GRANT SELECT ANY DICTIONARY TO ZABBIX;
GRANT UNLIMITED TABLESPACE TO ZABBIX;
GRANT SELECT ANY DICTIONARY TO ZABBIX;

        配置好环境后就可以使用pyora脚本实现监控oracle了,接下来需要执行pyora脚本来进行测试了。

        在下载的pyora压缩包中含有pyora.py脚本,将其上传至客户端服务器,然后使用python pyora.py –username zabbix –password 123456 –address 127.0.0.1 –database xxx show_users来测试是否能够获取到正常数据,下面是执行的结果:

1
{"data": [{"{#DBUSER}": "ANONYMOUS"}, {"{#DBUSER}": "APPQOSSYS"}, {"{#DBUSER}": "ASYNC"}, {"{#DBUSER}": "AUDSYS"}, {"{#DBUSER}": "DBSNMP"}, {"{#DBUSER}": "DIP"}, {"{#DBUSER}": "GSMADMIN_INTERNAL"}, {"{#DBUSER}": "GSMCATUSER"}, {"{#DBUSER}": "GSMUSER"}, {"{#DBUSER}": "OJVMSYS"}, {"{#DBUSER}": "ORACLE_OCM"}, {"{#DBUSER}": "OUTLN"}, {"{#DBUSER}": "SYNC"}, {"{#DBUSER}": "SYS"}, {"{#DBUSER}": "SYSBACKUP"}, {"{#DBUSER}": "SYSDG"}, {"{#DBUSER}": "SYSKM"}, {"{#DBUSER}": "SYSTEM"}, {"{#DBUSER}": "WMSYS"}, {"{#DBUSER}": "XDB"}, {"{#DBUSER}": "XS$NULL"}, {"{#DBUSER}": "ZABBIX"}]}

        获取的是json格式的数据,证明这个脚本是可以正常运行的,然后需要创建zabbix用户,然后再安装agnetd,然后修改zabbix用户的环境变量,编辑zabbix用户家目录下的.bashrc将上面的环境变量添加进去并source .bashrc使环境变量生效。

        之后再使用zabbix用户重复一次执行上面的获取数据的步骤,测试能够获取数据的话就说明没问题了,在agentd的配置文件中写入如下配置,以执行这个脚本获取到监控的数据:

1
2
tail -2 /home/zabbix/zabbix/etc/zabbix_agentd.conf
UserParameter=pyora[*],/usr/bin/python /home/zabbix/zabbix/scripts/pyora.py --username $1 --password $2 --address $3 --database $4 $5 $6 $7 $8

        保存后重启agentd,然后再在server端使用zabbix_get测试能否获取到数据,测试结果如下:

1
2
/opt/software/zabbix/bin/zabbix_get -s xx.xx.xx.xx -k"pyora[zabbix,123456,127.0.0.1,xxx,show_users]"
{"data": [{"{#DBUSER}": "ANONYMOUS"}, {"{#DBUSER}": "APPQOSSYS"}, {"{#DBUSER}": "ASYNC"}, {"{#DBUSER}": "AUDSYS"}, {"{#DBUSER}": "DBSNMP"}, {"{#DBUSER}": "DIP"}, {"{#DBUSER}": "GSMADMIN_INTERNAL"}, {"{#DBUSER}": "GSMCATUSER"}, {"{#DBUSER}": "GSMUSER"}, {"{#DBUSER}": "OJVMSYS"}, {"{#DBUSER}": "ORACLE_OCM"}, {"{#DBUSER}": "OUTLN"}, {"{#DBUSER}": "SYNC"}, {"{#DBUSER}": "SYS"}, {"{#DBUSER}": "SYSBACKUP"}, {"{#DBUSER}": "SYSDG"}, {"{#DBUSER}": "SYSKM"}, {"{#DBUSER}": "SYSTEM"}, {"{#DBUSER}": "WMSYS"}, {"{#DBUSER}": "XDB"}, {"{#DBUSER}": "XS$NULL"}, {"{#DBUSER}": "ZABBIX"}]}

        证明没有问题了,然后需要在zabbix_server的web端添加模板,这个模板在下载的pyora压缩包里面有一个半成品的模板,这个模板是个不完整的半成品,需要自己完成剩下的配置我这里稍后也会打包放上我这边进行部分修改后的模板上来。

        添加主机并添加模板,这时候需要注意,因为这个模板中使用了宏变量,所以在添加主机的时候需要设定相应的宏变量,下面是设定宏变量的截图:

        设定好宏之后,等待一段时间(ps:一般5到十分钟就能够正常的产生数据了),下面是获取到的监控数据的截图:

        好了,至此,简单的oracle监控已经结束了,至于更多的监控需求,各位可以依据自己的需求进行适当的修改脚本,以达到各位的要求。